home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / games / 2a / applicat.ion / slider.c < prev    next >
Text File  |  1985-05-29  |  10KB  |  332 lines

  1. /*********************************/
  2. /*  Slider routine test 1/24/85  */
  3. /*         by Tom Hudson         */
  4. /*********************************/
  5.  
  6. #include "portab.h"
  7. #include "b:slides.h"
  8.  
  9. int contrl[12];
  10. int intin[128];
  11. int ptsin[128];
  12. int intout[128];
  13. int ptsout[128];
  14.  
  15. int i,j,k,n,x,y,handle,l_intin[11],l_out[57];
  16. int gr_1,gr_2,gr_3,gr_4;
  17. int l_ptsin[20],pxy[2],ptemp[1],temp;
  18. int diax,diay,diaw,diah;
  19. int formresult,key;
  20. int slider0=1,slider1=5,slider2=0,slider3=8;
  21. long diaaddr;
  22.  
  23. /****************************************************/
  24. /* Set up these variables for the slider subroutine */
  25. /* They allow up to 10 sliders per dialog box!      */
  26. /****************************************************/
  27.  
  28. float slidstep[10],slidacc[10];
  29. int slidpos[10],slidmax[10];
  30.  
  31. main()
  32.  
  33. {
  34. appl_init();
  35.  
  36. handle=graf_handle(&gr_1,&gr_2,&gr_3,&gr_4);
  37.  
  38. /* open workstation */
  39.  
  40. l_intin[0] = 1;
  41. for (i = 1; i < 10; i++)
  42.   l_intin[i] = 1;
  43. l_intin[10] = 2;
  44. v_opnvwk(l_intin, &handle, l_out);
  45. rsrc_load(&"slides.rsc");
  46.  
  47. /**********************/
  48. /* Get dialog address */
  49. /**********************/
  50.  
  51. rsrc_gaddr(0,SLIDIA,&diaaddr);
  52.  
  53. graf_mouse(0,0L);
  54. v_show_c(handle,0);
  55.  
  56. /****************************************************/
  57. /* Draw dialog and handle user interaction          */
  58. /****************************************************/
  59.  
  60. redo_form:
  61. form_center(diaaddr,&diax,&diay,&diaw,&diah);
  62. form_dial(0,0,0,0,0,diax,diay,diaw,diah);
  63. objc_draw(diaaddr,0,2,diax,diay,diaw,diah);
  64.  
  65. /****************************************************/
  66. /* Initialize all sliders to their current settings */
  67. /****************************************************/
  68.  
  69. hreset(0,diaaddr,TRACK0,SLIDER0,10,slider0);
  70. hreset(1,diaaddr,TRACK1,SLIDER1,20,slider1);
  71. vreset(2,diaaddr,TRACK2,SLIDER2,22,slider2);
  72. vreset(3,diaaddr,TRACK3,SLIDER3,8,slider3);
  73.  
  74. /****************************************************/
  75. /* Do the form!                        */
  76. /****************************************************/
  77.  
  78. formloop:
  79. formresult=form_do(diaaddr,0);
  80.  
  81. /****************************************************/
  82. /* Find which slider to process & do it.            */
  83. /****************************************************/
  84.  
  85. if((formresult==LEFT0) || (formresult==RIGHT0) || (formresult==SLIDER0))
  86.  {
  87.  do_hslider(0,diaaddr,TRACK0,SLIDER0,LEFT0,RIGHT0,formresult);
  88.  goto formloop;
  89.  }
  90. else
  91. if((formresult==LEFT1) || (formresult==RIGHT1) || (formresult==SLIDER1))
  92.  {
  93.  do_hslider(1,diaaddr,TRACK1,SLIDER1,LEFT1,RIGHT1,formresult);
  94.  goto formloop;
  95.  }
  96. else
  97. if((formresult==UP2) || (formresult==DOWN2) || (formresult==SLIDER2))
  98.  {
  99.  do_vslider(2,diaaddr,TRACK2,SLIDER2,UP2,DOWN2,formresult);
  100.  goto formloop;
  101.  }
  102. else
  103. if((formresult==UP3) || (formresult==DOWN3) || (formresult==SLIDER3))
  104.  {
  105.  do_vslider(3,diaaddr,TRACK3,SLIDER3,UP3,DOWN3,formresult);
  106.  goto formloop;
  107.  }
  108. else
  109.  
  110. /****************************************************/
  111. /* If OK pressed, grab the slider settings          */
  112. /****************************************************/
  113.  
  114. if(formresult==EXITOK)
  115.  {
  116.  slider0=slidpos[0];
  117.  slider1=slidpos[1];
  118.  slider2=slidpos[2];
  119.  slider3=slidpos[3];
  120.  }
  121. else
  122.  
  123. /****************************************************/
  124. /* If any button besides CANCEL, continue form_do   */
  125. /****************************************************/
  126.  
  127. if(formresult!=EXITCAN)
  128.  goto formloop;
  129.  
  130. /****************************************************/
  131. /* Form exited, reset OK & CANCEL                   */
  132. /****************************************************/
  133.  
  134. objc_change(diaaddr,EXITOK,0,diax,diay,diaw,diah,0,1);
  135. objc_change(diaaddr,EXITCAN,0,diax,diay,diaw,diah,0,1);
  136. form_dial(3,0,0,0,0,diax,diay,diaw,diah);
  137.  
  138. /****************************************************/
  139. /* Get key.  If CR, quit.  If other key, re-enter   */
  140. /* the form to test for proper slider settings.     */
  141. /****************************************************/
  142.  
  143. key=evnt_keybd();
  144. if(key != 0x1c0d)
  145.  goto redo_form;
  146.  
  147. /* Close the workstation. */
  148.  
  149. rsrc_free();
  150. v_clsvwk(handle);
  151.  
  152. appl_exit();
  153. _exit(0);
  154.  
  155. }
  156.  
  157. /****************************************************/
  158. /* RESET HORIZONTAL SLIDER                */
  159. /* -----------------------                */
  160. /* Parameters:                        */
  161. /* number  = slider number (0-9)            */
  162. /* tree    = address of dialog tree            */
  163. /* trackix = index of slider track            */
  164. /* slidix  = index of slider                */
  165. /* maximum = maximum slider setting (0-maximum)     */
  166. /* initial = initial slider setting (0-maximum)     */
  167. /****************************************************/
  168.  
  169. hreset(number,tree,trackix,slidix,maximum,initial)
  170. int number,tree[][12],trackix,slidix,maximum,initial;
  171. {
  172. float work1,work2;
  173.  
  174. slidmax[number]=maximum;
  175. slidpos[number]=initial;
  176. work1=(tree[trackix][10]-tree[slidix][10]);
  177. work2=maximum;
  178. work1/=work2;
  179. slidstep[number]=work1;
  180. work2=initial;
  181. slidacc[number]=work1*work2;
  182. tree[slidix][8]=slidacc[number];
  183. objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
  184. }
  185.  
  186. /****************************************************/
  187. /* RESET VERTICAL SLIDER                */
  188. /* ----------------------                */
  189. /* Parameters:                        */
  190. /* number  = slider number (0-9)            */
  191. /* tree    = address of dialog tree            */
  192. /* trackix = index of slider track            */
  193. /* slidix  = index of slider                */
  194. /* maximum = maximum slider setting (0-maximum)     */
  195. /* initial = initial slider setting (0-maximum)     */
  196. /****************************************************/
  197.  
  198. vreset(number,tree,trackix,slidix,maximum,initial)
  199. int number,tree[][12],trackix,slidix,maximum,initial;
  200. {
  201. float work1,work2;
  202.  
  203. slidmax[number]=maximum;
  204. slidpos[number]=initial;
  205. work1=(tree[trackix][11]-tree[slidix][11]);
  206. work2=maximum;
  207. work1/=work2;
  208. slidstep[number]=work1;
  209. work2=initial;
  210. slidacc[number]=work1*work2;
  211. tree[slidix][9]=slidacc[number];
  212. objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
  213. }
  214.  
  215. /****************************************************/
  216. /* PROCESS HORIZONTAL SLIDER                */
  217. /* -------------------------                */
  218. /* Parameters:                        */
  219. /* number  = slider number (0-9)            */
  220. /* tree    = address of dialog tree            */
  221. /* trackix = index of slider track            */
  222. /* slidix  = index of slider                */
  223. /* leftix  = index of left-move button            */
  224. /* rightix = index of right-move button            */
  225. /* whichix = index of item from form_do            */
  226. /****************************************************/
  227.  
  228. do_hslider(number,tree,trackix,slidix,leftix,rightix,whichix)
  229. int tree[][12],trackix,slidix,leftix,rightix,whichix;
  230. {
  231. int tempx,tempy,sbasex,sbasey,tbasex,tbasey;
  232.  
  233. if(whichix==rightix)
  234.  {
  235.  if(slidpos[number]<slidmax[number])
  236.   {
  237.   slidacc[number]+=slidstep[number];
  238.   slidpos[number]++;
  239.   tree[slidix][8]=slidacc[number];
  240.   objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
  241.   }
  242.  }
  243. else
  244. if(whichix==leftix)
  245.  {
  246.  if(slidpos[number]>0)
  247.   {
  248.   slidacc[number]-=slidstep[number];
  249.   slidpos[number]--;
  250.   tree[slidix][8]=slidacc[number];
  251.   objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
  252.   }
  253.  }
  254. else
  255. if(whichix==slidix)
  256.  {
  257.  objc_offset(tree,slidix,&sbasex,&sbasey);
  258.  objc_offset(tree,trackix,&tbasex,&tbasey);
  259.  graf_dragbox(tree[slidix][10],tree[slidix][11],sbasex,sbasey,
  260.               tbasex,tbasey,tree[trackix][10],tree[trackix][11],
  261.               &tempx,&tempy);
  262.  if(tempx!=sbasex)
  263.   {
  264.   slidacc[number]=tempx-tbasex;
  265.   slidpos[number]=slidacc[number]/slidstep[number];
  266.   slidacc[number]=slidpos[number];
  267.   slidacc[number]*=slidstep[number];
  268.   tree[slidix][8]=slidacc[number];
  269.   objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
  270.   }
  271.  }
  272. }
  273.  
  274. /****************************************************/
  275. /* PROCESS VERTICAL SLIDER                */
  276. /* -----------------------                */
  277. /* Parameters:                        */
  278. /* number  = slider number (0-9)            */
  279. /* tree    = address of dialog tree            */
  280. /* trackix = index of slider track            */
  281. /* slidix  = index of slider                */
  282. /* upix    = index of up-move button            */
  283. /* downix  = index of down-move button            */
  284. /* whichix = index of item from form_do            */
  285. /****************************************************/
  286.  
  287. do_vslider(number,tree,trackix,slidix,upix,downix,whichix)
  288. int tree[][12],trackix,slidix,upix,downix,whichix;
  289. {
  290. int tempx,tempy,sbasex,sbasey,tbasex,tbasey;
  291.  
  292. if(whichix==downix)
  293.  {
  294.  if(slidpos[number]<slidmax[number])
  295.   {
  296.   slidacc[number]+=slidstep[number];
  297.   slidpos[number]++;
  298.   tree[slidix][9]=slidacc[number];
  299.   objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
  300.   }
  301.  }
  302. else
  303. if(whichix==upix)
  304.  {
  305.  if(slidpos[number]>0)
  306.   {
  307.   slidacc[number]-=slidstep[number];
  308.   slidpos[number]--;
  309.   tree[slidix][9]=slidacc[number];
  310.   objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
  311.   }
  312.  }
  313. else
  314. if(whichix==slidix)
  315.  {
  316.  objc_offset(tree,slidix,&sbasex,&sbasey);
  317.  objc_offset(tree,trackix,&tbasex,&tbasey);
  318.  graf_dragbox(tree[slidix][10],tree[slidix][11],sbasex,sbasey,
  319.               tbasex,tbasey,tree[trackix][10],tree[trackix][11],
  320.               &tempx,&tempy);
  321.  if(tempy!=sbasey)
  322.   {
  323.   slidacc[number]=tempy-tbasey;
  324.   slidpos[number]=slidacc[number]/slidstep[number];
  325.   slidacc[number]=slidpos[number];
  326.   slidacc[number]*=slidstep[number];
  327.   tree[slidix][9]=slidacc[number];
  328.   objc_draw(tree,trackix,1,tree[0][8],tree[0][9],tree[0][10],tree[0][11]);
  329.   }
  330.  }
  331. }
  332. əXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX